home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 22 / Amiga Format AFCD22 (Jan 1998, Issue 106).iso / -in_the_mag- / emulation / c64-tape / orgtape.asm < prev    next >
Assembly Source File  |  1997-11-17  |  4KB  |  286 lines

  1. *************************************************************************
  2. * Original Tape Loader
  3. * (C) 1995,1997 Per Håkan Sundell
  4. * requires CCS adapter
  5. *************************************************************************
  6.  
  7. *        incdir     Devpac:include
  8.  
  9. *=======================================================================*
  10. *                                    *
  11. *    CODE SECTION                            *
  12. *                                    *
  13. *=======================================================================*
  14.         section    CODE,code
  15.  
  16.     
  17. Main
  18.     BSR    OpenLibraries
  19.     bsr    MakeTimeTable
  20.     BSR    PressPlay
  21.     TST.L    D0
  22.     BNE    _mbreak
  23.     BSR    ReadFileData
  24.     TST.L    D0
  25.     BNE    _merror
  26.     BSR    SaveFile
  27.     TST.L    D0
  28.     BNE    _mserror
  29.     RTS
  30.  
  31. _merror    LEA    TXT_LOADERROR,A0
  32.     BSR    Print
  33.     RTS
  34.  
  35. _mbreak    LEA    TXT_BREAK,A0
  36.     BSR    Print
  37.     RTS
  38.  
  39. _mserror    LEA    TXT_SAVEERROR,A0
  40.     BSR    Print
  41.     RTS
  42.  
  43. IrqOff
  44.     MOVE.W    #$4000,$DFF09A
  45.     RTS
  46.  
  47. IrqOn
  48.     MOVE.W    #$C000,$DFF09A
  49.     RTS
  50.  
  51. SaveFile
  52.     LEA    file_name,A0
  53.     MOVE.L    A0,D1
  54.     MOVE.L    #$3EE,D2
  55.     MOVE.L    dos_lib,A6
  56.     JSR    -$1E(A6)
  57.     MOVE.L    D0,D1
  58.     BEQ    _sferror
  59.     CMP.L    #$FFFFFFFF,D0
  60.     BEQ    _sferror
  61.     MOVE.L    D1,-(SP)
  62.     lea    file_header,a0
  63.     move.l    a0,d2
  64.     move.l    #$14,d3
  65.     move.l    file_length,d0
  66.     move.b    d0,$10(a0)
  67.     lsr.l    #8,d0
  68.     move.b    d0,$11(a0)
  69.     lsr.l    #8,d0
  70.     move.b    d0,$12(a0)
  71.     lsr.l    #8,d0
  72.     move.b    d0,$13(a0)
  73.     MOVE.L    dos_lib,A6
  74.     jsr    -$30(a6)
  75.     MOVE.L    (SP),D1
  76.     LEA    file_data,A0
  77.     MOVE.L    A0,D2
  78.     MOVE.L    file_length,D3
  79.     MOVE.L    dos_lib,A6
  80.     JSR    -$30(A6)
  81.     MOVE.L    (SP)+,D1
  82.     MOVE.L    dos_lib,A6
  83.     JSR    -$24(A6)
  84.     MOVEQ    #0,D0
  85.     RTS
  86.  
  87. _sferror    MOVEQ    #1,D0
  88.     RTS
  89.  
  90. ReadFileData
  91.     bsr    MotorOn
  92.     lea    file_data,a0
  93.     move.l    a0,a1
  94.     adda.l    #$140000,a1
  95.     move.l    #$140000,file_length
  96.     bsr    ReadSync
  97. _rfd1
  98.     bsr    ReadByte1
  99.     move.b    d0,(a0)+
  100.     btst    #6,(a4)
  101.     beq    _rfd2
  102.     bsr    ReadByte2
  103.     move.b    d0,(a0)+
  104.     cmp.l    a0,a1
  105.     bne    _rfd1
  106. _rfd2
  107.     move.l    a0,d0
  108.     sub.l    #file_data,d0
  109.     move.l    d0,file_length
  110.     
  111.     bsr    MotorOff
  112.     moveq    #0,d0
  113.     rts
  114.  
  115. ReadSync
  116.     MOVE.W    #$7F80,D7
  117.     MOVE.W    #$40,$DFF0A8
  118.     MOVE.W    #$80,$DFF09C
  119.     MOVE.W    #$80,$DFF0A6
  120.     RTS
  121.  
  122. ReadByte1
  123.     moveq    #0,D0
  124. _rb1    or.b    $d00(a5),D0
  125.     btst    #4,D0
  126.     beq    _rb1
  127.     move.b    #$00,$e00(a5)
  128.     move.b    #$19,$f00(a5)
  129.     move.w    #$80,$09c(a6)
  130.     move.w    d7,$0aa(a6)
  131.     move.w    $006(a6),$180(a6)
  132.     and.b    #$01,d0
  133.     beq    _rb2
  134.     moveq    #$00,d0
  135.     rts
  136. _rb2
  137.     move.w    $500(a5),d0
  138.     move.b    $400(a5),d0
  139.     subq.w    #$2,d0
  140.     lea    time_table,a2
  141.     move.b    0(a2,d0.w),d0
  142.     RTS
  143.  
  144. ReadByte2
  145.     moveq    #0,D0
  146. _rb3    or.b    $d00(a5),D0
  147.     btst    #4,d0
  148.     beq    _rb3
  149.     move.b    #$00,$f00(a5)
  150.     move.b    #$19,$e00(a5)
  151.     move.w    #$80,$09c(a6)
  152.     move.w    d7,$0aa(a6)
  153.     move.w    $006(a6),$180(a6)
  154.     and.b    #$02,d0
  155.     beq    _rb4
  156.     moveq    #$00,d0
  157.     rts
  158. _rb4
  159.     move.w    $700(a5),d0
  160.     move.b    $600(a5),d0
  161.     subq.w    #$2,d0
  162.     lea    time_table,a2
  163.     move.b    0(a2,d0.w),d0
  164.     rts
  165.  
  166. MakeTimeTable
  167.     lea    time_table,a0
  168.     move.w    #$5c2,d2
  169. _mtt1
  170.     move.w    d2,d0
  171.     mulu    #$07ff,d0
  172.     divu    #$05c2,d0
  173.     lsr    #3,d0
  174.     move.b    d0,(a0)+
  175.     subq.w    #1,d2
  176.     bne    _mtt1
  177.     rts
  178.  
  179. PressPlay
  180.     BCLR    #5,$BFD100
  181.     MOVE.B    $BFE001,D0
  182.     BSET    #5,$BFD100
  183.     BTST    #5,D0
  184.     BEQ    _pp2
  185.     LEA    TXT_PLAY,A0
  186.     BSR    Print
  187. _pp1    BTST    #6,$BFE001
  188.     BEQ    _pp3
  189.     BCLR    #5,$BFD100
  190.     MOVE.B    $BFE001,D0
  191.     BSET    #5,$BFD100
  192.     BTST    #5,D0
  193.     BNE    _pp1
  194. _pp2    MOVEQ    #0,D0
  195.     RTS
  196.  
  197. _pp3    MOVEQ    #1,D0
  198.     RTS
  199.  
  200. MotorOn
  201.     bsr    IrqOff
  202.     lea    $dff000,a6
  203.     lea    $bfd000,a5
  204.     lea    $bfe001,a4
  205.     bclr    #7,$100(a5)
  206.     bclr    #5,$100(a5)
  207.     move.b    #$0,$e00(a5)
  208.     move.b    #$0,$f00(a5)
  209.     move.b  #$5,$500(a5)
  210.     move.b  #$c2,$400(a5)
  211.     move.b    #$5,$700(a5)
  212.     move.b    #$c2,$600(a5)
  213.     move.b    $d00(a5),d0
  214.     moveq    #0,d0
  215. _mo1    dbra    d0,_mo1
  216.  
  217.     rts
  218.  
  219. MotorOff
  220.     BSET    #7,$BFD100
  221.     BSET    #5,$BFD100
  222.     BCLR    #5,$BFD100
  223.     BSET    #5,$BFD100
  224.     BSR    IrqOn
  225.     RTS
  226.  
  227. OpenLibraries
  228.     LEA    doslibrary.MSG,A1
  229.     MOVEQ    #0,D0
  230.     MOVE.L    4,A6
  231.     JSR    -$198(A6)
  232.     MOVE.L    D0,dos_lib
  233.     MOVE.L    dos_lib,A6
  234.     JSR    -$3C(A6)
  235.     MOVE.L    D0,std_out
  236.     RTS
  237.  
  238. Print
  239.     MOVEM.L    D2/D3/A6,-(SP)
  240.     MOVE.L    A0,D2
  241.     MOVEQ    #0,D3
  242. _p1    TST.B    (A0)+
  243.     BEQ    _p2
  244.     ADDQ.L    #1,D3
  245.     BRA    _p1
  246.  
  247. _p2    TST.L    D3
  248.     BEQ    _p3
  249.     MOVE.L    std_out,D1
  250.     MOVE.L    dos_lib,A6
  251.     JSR    -$30(A6)
  252. _p3    MOVEM.L    (SP)+,D2/D3/A6
  253.     RTS
  254.  
  255. *=======================================================================*
  256. *                                    *
  257. *    DATA SECTION                            *
  258. *                                    *
  259. *=======================================================================*
  260.     Section    DATA,data
  261.  
  262.  
  263. TXT_PLAY    dc.b    10,'PRESS PLAY ON TAPE',$A,0
  264. TXT_FOUND    dc.b    'FOUND ',0
  265. TXT_LOADING    dc.b    'LOADING',$A,0
  266. TXT_BREAK    dc.b    'BREAK ERROR',$A,0
  267. TXT_LOADERROR    dc.b    'LOAD ERROR',$A,0
  268. TXT_SAVEERROR    dc.b    'UNABLE TO CREATE AMIGA FILE ERROR',$A,0
  269. TXT_LINEFEED    dc.b    10,0
  270. doslibrary.MSG    dc.b    'dos.library',0,0
  271.  
  272. file_name    dc.b    'RAWTAPE',0
  273.  
  274. file_header    dc.b    'C64-TAPE-RAW',0,0,0,0
  275.         dc.b    0,0,0,0
  276.  
  277.     Section    Bss,BSS
  278.  
  279. dos_lib        ds.l    1
  280. std_out        ds.l    1
  281. time_table    ds.b    $600
  282. file_length    ds.l    1
  283. file_data    ds.b    $140000
  284.  
  285.     END
  286.